using System;
using System.Collections.Generic;
using System.Text;
using Impact.Model.Objects;

namespace Impact.Model.Service
{
    /// <summary>
    /// defines the functions available from the service providing tag data
    /// </summary>
    public interface ITagService
    {

        /// <summary>
        /// retrieve a tag based on its ID
        /// </summary>
        Tag FetchByID(int tagId);

        /// <summary>
        /// retrieve a tag based on the text in the tag.  the input text must exactly match the tag's text
        /// </summary>
        Tag FetchByText(string tagText);

        /// <summary>
        /// retrieve all tags
        /// </summary>
        TagCollection FetchAll();

        /// <summary>
        /// retrieve all ArticleTag relationships by tag
        /// </summary>
        /// <param name="tagId">the ID of the tag to get relationships for</param>
        ArticleTagCollection FetchArticleTags(int tagId);

        /// <summary>
        /// save the given tag
        /// </summary>
        void Save(Tag t);

        /// <summary>
        /// remove the given tag
        /// </summary>
        void Remove(int tagId);


    }
}
